// compile: g++ -o RAII RAII.cc -std=c++11
// run: ./RAII
#include <iostream>
using namespace std;
template <typename T, int SIZE>
class XXX {
 public:
  XXX() {
    // 分配资源，可以不只是动态内存,还可以是文件描述符、数据库连接等
    ptr = new T(SIZE);
  }
  ~XXX() {
    // 对在构造函数中分配的资源进行回收    
    delete[] ptr;
  }

   private:
    T* ptr = nullptr;
  };

  int main() {
    XXX<char, 100> obj1;
    XXX<int, 10> obj2;
    return 0;
  }